<?php
/************************************************************************************************
 * 																								*
 * Autor: Dariusz Janik																			*
 * Data utworzenia: 2.11.2012																	*
 * Data ostatniej modyfikacji: 5.12.2012														*
 * 																								*
 * Klasa: BazaDanych - klasa odpowiedzialna za komunikację z bazą danych.						*
 * 																								*
 * Korzysta z obiektów klas: Db_class, Wezel, Uzytkownik_class									*
 * 																								*
 * Lokalizacja pliku: klasy/bazyDanych.php														*
 * 																								*
 ************************************************************************************************/

require_once 'db_class.php';
require_once 'wezel.php';
require_once 'uzytkownik_class.php';

class BazaDanych
{
	private $db;
	
	//w przypadku błędu połączenia $this->db ma wartość null
	public function __construct()
	{
		$this->db = @new mysqli(DB_class::$host, DB_class::$user, DB_class::$pass, DB_class::$dbName);
		if (mysqli_connect_errno() != 0){
			echo '<p class="blad">Wystąpił błąd połączenia: ' . mysqli_connect_error() . '</p>';
			$this->db=null;
		}
	}
	
	public function __destruct()
	{
		if($this->db!==null)
			$this->db->close();
	}
	
	public function zwrocWezel($id)
	{
		if($this->db!==null && $id!==null)
		{
			$wezelBD=$this->db->query("SELECT * FROM wezly WHERE id_wezla = ".$id);
			$we=$wezelBD->fetch_assoc();
			
			if($we!==null)								//jeśli istnieje węzeł o podanym id
			{
				$osobaBD=$this->db->query("SELECT * FROM  osoba WHERE id_osoba =".$id);
				$os=$osobaBD->fetch_assoc();
				$osoba=new Osoba($os['id_osoba'], $os['imie'], $os['nazwisko'], $os['data_urodzenia'], $os['data_smierci'], $os['plec'], $os['zdjecie'], $os['notatka'], $os['nazwisko_panienskie']);
					
				//Znalezienie id partnera, jeśli nie ma to $idPartnera=null
				if(!$osoba->getPlec())	//jeżeli kobieta to znajdź id męża
				{
					$wezelBD=$this->db->query("SELECT * FROM wezly WHERE partner =".$id);
					$wePartnera=$wezelBD->fetch_assoc();
					if($wePartnera===null)
						$idPartnera=null;
					else
						$idPartnera=$wePartnera['id_wezla'];
				}
				else					//jeżeli mężczyzna to pobierz id żony
				{
					$idPartnera=$we['partner'];
				}
					
			
				//tworzenie węzła partnera
				if($idPartnera!==null)
				{
					$osobaBD=$this->db->query("SELECT * FROM  osoba WHERE id_osoba =".$idPartnera);
					$osPartnera=$osobaBD->fetch_assoc();
					$osobaPartnera=new Osoba($osPartnera['id_osoba'], $osPartnera['imie'], $osPartnera['nazwisko'], $osPartnera['data_urodzenia'], $osPartnera['data_smierci'], $osPartnera['plec'], $osPartnera['zdjecie'], $osPartnera['notatka'], $osPartnera['nazwisko_panienskie']);
			
					$wezelBD=$this->db->query("SELECT * FROM wezly WHERE id_wezla =".$idPartnera);
					$wePartnera=$wezelBD->fetch_assoc();
					$wezelPartnera=new Wezel($wePartnera['id_wezla'], null, $wePartnera['wlasciciel'], $osobaPartnera);
					if($uzytkownik=$this->zwrocUzytkownikaWgIdWezla($wezelPartnera->getId()))
						$wezelPartnera->setUzytkownik($uzytkownik);
				}
				else
					$wezelPartnera=null;
					
				//tworzenie węzła
				$wezel=new Wezel($we['id_wezla'], $wezelPartnera, $we['wlasciciel'], $osoba);
				if($uzytkownik=$this->zwrocUzytkownikaWgIdWezla($wezel->getId()))
					$wezel->setUzytkownik($uzytkownik);
				return $wezel;
			}
			else 					//jeśli nie istnieje węzeł o podanym id to zwróć null
				return null;
		}
		else 
			return null;
		
	}
	
	//zwraca false jeśli edycja się nie powiedzie
	public function edytujWezel(Wezel $wez, $moderator)
	{
		if($this->db!==null && $wez->getId()!==null)
		{
			$user=new Uzytkownik_class();
			$staryWezel=$this->zwrocWezel($wez->getId());
			if($staryWezel===null)	return false;			//sprawdzenie czy istnieje węzeł do edycji
			if($wez->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
			$user=new Uzytkownik_class();
			
			//przygotowanie danych do wpisania do bazy + wartości NULL
			$db=new DB_class();
			
			$id=$wez->getId();
			$dataUrodzenia=$wez->getOsoba()->getDUint();
			$dataSmierci=$wez->getOsoba()->getDSint();
			$imie=$db->filtruj($wez->getOsoba()->getImie());
			$nazwisko=$db->filtruj($wez->getOsoba()->getNazwisko());
			if($wez->getOsoba()->getNotatka()!==null) $notatka=$db->filtruj($wez->getOsoba()->getNotatka());
			else $notatka=null;
			if($wez->getOsoba()->getZdjecie()!==null) $zdjecie=$db->filtruj($wez->getOsoba()->getZdjecie());
			else $zdjecie=null;
			if($wez->getOsoba()->getNazwPanien()!==null) $nazwiskoPanienskie=$db->filtruj($wez->getOsoba()->getNazwPanien());
			else $nazwiskoPanienskie=null;
			if($wez->getOsoba()->getPlec())		//zapisanie płci do zmiennej: mężczyzna=1, kobieta=0
				$plec=1;
			else
				$plec=0;
			if($dataUrodzenia!==null) $dataUrodzenia="'{$dataUrodzenia}'"; else $dataUrodzenia="'2012-01-01 00:00:00'";
			if($dataSmierci!==null) $dataSmierci="'{$dataSmierci}'"; else $dataSmierci='NULL';
			if($nazwiskoPanienskie!==null) $nazwiskoPanienskie="'{$nazwiskoPanienskie}'"; else $nazwiskoPanienskie='NULL';
			if($notatka!==null) $notatka="'{$notatka}'"; else $notatka='NULL';
			if($zdjecie!==null) $zdjecie="'{$zdjecie}'"; else $zdjecie='NULL';
			
			//przygotowanie wpisu do bazy
			$zapytanie="UPDATE `osoba` SET ";
			$zapytanie.="`imie` =  '{$imie}', ";
			$zapytanie.="`nazwisko` =  '{$nazwisko}', ";
			if($user->CzyAdmin($moderator))
			{
				$zapytanie.="`data_urodzenia` =  {$dataUrodzenia}, ";
				$zapytanie.="`plec` =  '{$plec}', ";
			}
			$zapytanie.="`zdjecie` =  {$zdjecie}, ";
			$zapytanie.="`notatka` =  {$notatka}, ";
			$zapytanie.="`nazwisko_panienskie` =  {$nazwiskoPanienskie}, ";
			$zapytanie.="`data_smierci` =  {$dataSmierci} ";
			$zapytanie.="WHERE `id_osoba` =".$id;

			$wynik=$this->db->query($zapytanie);
			if($wynik)
				return true;
			else
				return false;
		}
		else
			return false;
	}
	
	/*
	 * funkcja przyjmuje jako parametr Wezel, identyfikator musi być równy -1 aby dodać nowy węzeł do bazy
	 * funkcja zwraca identyfikator jaki został wygenerowany dla danego węzła
	 * jeśli operacja się nie powiedzie to metoda zwraca false
	 */
	public function dodajWezel(Wezel $wez)
	{
		if($wez!==null && $wez->getId()>=0)		//jeśli węzeł ma identyfikator większy bądź równy zero, to znaczy, że jest istniejącym już wezłem
			return $wez->getId();
		
		if($this->db!==null)
		{
		//generowanie ID - maksymalny identyfikator + 1
			$maxBD=$this->db->query("SELECT MAX( id_wezla ) max FROM  wezly");
			$maxID=$maxBD->fetch_assoc();
			if($maxID['max']!==null)
				$identyfikator = $maxID['max']+1;
			else
				$identyfikator = 2;
			
			//jeśli w tabeli osoba jest więcej wpisów to wybierzemy największy id z tabeli osoba
			$maxBD=$this->db->query("SELECT MAX( id_osoba ) max FROM  osoba");	
			$maxID=$maxBD->fetch_assoc();
			if($maxID['max']!==null)
				$identyfikatoro = $maxID['max']+1;
			else
				$identyfikatoro = 1;
			
			if($identyfikatoro>$identyfikator)			//porównanie maxID(wezly) z maxID(osoba)
				$identyfikator=$identyfikatoro;
			
			
		//przygotowanie danych do wpisania do bazy + wartości NULL
			$db=new DB_class();

			$rodzic=$wez->getRodzic();
			$moderator=$wez->getModerator();
			$dataUrodzenia=$wez->getOsoba()->getDUint();
			$dataSmierci=$wez->getOsoba()->getDSint();
			$imie=$db->filtruj($wez->getOsoba()->getImie());
			$nazwisko=$db->filtruj($wez->getOsoba()->getNazwisko());
			if($wez->getOsoba()->getNotatka()!==null) $notatka=$db->filtruj($wez->getOsoba()->getNotatka());
			else $notatka=null;
			if($wez->getOsoba()->getZdjecie()!==null) $zdjecie=$db->filtruj($wez->getOsoba()->getZdjecie());
			else $zdjecie=null;
			if($wez->getOsoba()->getNazwPanien()!==null) $nazwiskoPanienskie=$db->filtruj($wez->getOsoba()->getNazwPanien());
			else $nazwiskoPanienskie=null;
			if($wez->getOsoba()->getPlec())		//zapisanie płci do zmiennej: mężczyzna=1, kobieta=0
				$plec=1;
			else
				$plec=0;
			if($rodzic!==null) $rodzic="'{$rodzic->getId()}'"; else $rodzic='NULL';
			if($moderator!==null) $moderator="'{$moderator}'"; else $moderator='NULL';
			if($dataUrodzenia!==null) $dataUrodzenia="'{$dataUrodzenia}'"; else $dataUrodzenia="'2012-01-01 00:00:00'";
			if($dataSmierci!==null) $dataSmierci="'{$dataSmierci}'"; else $dataSmierci='NULL';
			if($nazwiskoPanienskie!==null) $nazwiskoPanienskie="'{$nazwiskoPanienskie}'"; else $nazwiskoPanienskie='NULL';
			if($notatka!==null) $notatka="'{$notatka}'"; else $notatka='NULL';
			if($zdjecie!==null) $zdjecie="'{$zdjecie}'"; else $zdjecie='NULL';
			
			
			
		//dodanie danych do bazy
			$wynik=$this->db->query("INSERT INTO `osoba` (`imie`, `nazwisko`, `id_osoba`, `data_urodzenia`, `plec`, `zdjecie`, `notatka`, `nazwisko_panienskie`, `data_smierci`)
					VALUES ('{$imie}', '{$nazwisko}', '{$identyfikator}', {$dataUrodzenia},
					'{$plec}', {$zdjecie}, {$notatka}, {$nazwiskoPanienskie}, {$dataSmierci})");
			if(!$wynik) return false;
			$wynik=$this->db->query("INSERT INTO `wezly` (`id_wezla`, `rodzic`, `partner`, `wlasciciel`) VALUES ('{$identyfikator}', NULL, NULL, {$moderator})");
			if(!$wynik) return false;
			
			
			return $identyfikator;
		}
		else
			return false;
	}
	
	public function zwrocKorzen($id)
	{
		if($this->db!==null)
		{
			$licznik=0;
			do //szukanie w pętli korzenia - węzła który nie ma rodzica
			{
				$wezelBD=$this->db->query("SELECT * FROM wezly WHERE id_wezla = ".$id);
				if($wezelBD)
				{
					$we=$wezelBD->fetch_assoc();
					if($we['rodzic']!==null)
						$id=$we['rodzic'];
					
					$licznik++;
					if($licznik>100)	//zabezpieczenie przed nieskończoną pętlą
					{
						echo '<p class="blad">Prawdopodobnie w drzewie występuje cykl. Liczba poziomów przekroczyła 100</p>';
						$we['rodzic']=null;			//to spowoduje przerwanie pętli przy najbliższym sprawdzeniu warunku
					}
				}
				else 
					return null;		//zakończenie pętli z powodu nieznalezienia węzła w bazie
			}
			while($we['rodzic']!==null);

			return $this->zwrocWezel($we['id_wezla']);
		}
	}
	
	public function zwrocDzieci($id)
	{
		if($this->db!==null)
		{
			$wezelBD=$this->db->query("SELECT * FROM wezly WHERE rodzic = ".$id);
			$dzieci=array();
			//pobranie w pętli kolejnych rekordów zapytania zwracającego dzieci danego węzła
			while(($we=$wezelBD->fetch_assoc())!==null)
			{
				$dzieci[]=$this->zwrocWezel($we['id_wezla']);
			}
			
			return $dzieci;
		}
	}
	
	public function zwrocRodzica($id)
	{
		if($this->db!==null)
		{
			$wezelBD=$this->db->query("SELECT * FROM wezly WHERE id_wezla = ".$id);
			if($wezelBD)
			{
				$we=$wezelBD->fetch_assoc();
				if($we['rodzic']!==null)
					return $this->zwrocWezel($we['rodzic']);
				else 
					return null;
			}
			else 
				return null;
		}
		else 
			return null;
	}
	
	public function zwrocIdWezlaUzytkownika($uzytkownik)
	{
		if($this->db!==null && $uzytkownik!==null)
		{
			$wezelBD=$this->db->query("SELECT * FROM uzytkownik WHERE login= '".$uzytkownik."'");
			if($wezelBD)
			{
				$we=$wezelBD->fetch_assoc();
				return $we['id_osoba'];
			}
			else
				return false;		
		}
		else
			return false;
	}
	
	public function dodajPartnera(Wezel $wez, $id, $moderator)
	{
		if($this->db!==null && $id!==null)
		{
		//sprawdzenie warunków
			if($wez->getOsoba()->getPlec()==null)	return false;		//jeśli płeć nie jest ustawiona to zakończ
			if(($weid=$this->zwrocWezel($id))==null)	return false;	//jeśli węzeł do którego dodajemy ($weid) nie istnieje to zakończ
			$user=new Uzytkownik_class();
			if($weid->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
			if(!$weid->mozeBycPartnerem($wez))		return false;		//sprawdzenie czy może być partnerem
			
			$idnowy=$this->dodajWezel($wez);
			if(!$idnowy)	return false;			//jeśli nie uda się dodać węzła to zakończ
			
			if($weid->getOsoba()->getPlec())								//jeśli wezel do którego dodajemy jest mężczyzną
			{
				$idM=$weid->getId();
				$idK=$idnowy;
			}
			else 															//jeśli wezel do którego dodajemy jest kobietą
			{
				$idM=$idnowy;
				$idK=$weid->getId();
			}

			$wynik=$this->db->query("UPDATE  `wezly` SET  `partner` =  {$idK} WHERE `id_wezla` ={$idM}");
			if($wynik)
				return true;
			else
				return false;
		}
		else
			return false;
	}
	
	public function dodajDziecko(Wezel $wez, $id, $moderator)
	{
		if($this->db!==null && $id!==null)
		{
		//sprawdzenie warunków
			if(($weid=$this->zwrocWezel($id))==null)	return false;	//jeśli węzeł do którego dodajemy ($weid) nie istnieje to zakończ
			$user=new Uzytkownik_class();
			if($weid->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
			if(!$weid->mozeBycRodzicem($wez))	return false;			//sprawdzenie czy może być rodzicem
			
			$idnowy=$this->dodajWezel($wez);
			if(!$idnowy)	return false;			//jeśli nie uda się dodać węzła to zakończ
			
			if($weid->getOsoba()->getPlec())								//jeśli wezel do którego dodajemy jest mężczyzną
				$idR=$weid->getId();
			else 															//jeśli wezel do którego dodajemy jest kobietą
				$idR=$weid->getPartner()->getId();
			
			$wynik=$this->db->query("UPDATE  `wezly` SET  `rodzic` =  {$idR} WHERE `id_wezla` ={$idnowy}");
			if($wynik)
				return true;
			else
				return false;
		}
		else
			return false;
	}
	
	public function dodajRodzicow(Wezel $weOjciec, Wezel $weMatka, $id, $moderator)
	{
		if($this->db!==null && $id!==null)
		{
		//sprawdzenie warunków
			if(($weid=$this->zwrocWezel($id))==null)	return false;	//jeśli węzeł do którego dodajemy ($weid) nie istnieje to zakończ
			$user=new Uzytkownik_class();
			if($weid->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
			if($weOjciec->getOsoba()->getPlec()==false || $weMatka->getOsoba()->getPlec()==true) return false;//jeśli płcie się nie zgadzają to zakończ
			
			if(!$weid->mozeBycDzieckiem($weOjciec, $weMatka))	return false;		//sprawdzenie czy może być dzieckiem

			
			
			$idOjciec=$this->dodajWezel($weOjciec);
			if(!$idOjciec)	return false;			//jeśli nie uda się dodać ojca to zakończ
			if($weOjciec->getId()<0)
			{
				if(!$this->dodajPartnera($weMatka, $idOjciec, $moderator))	return false;			//jeśli nie uda się dodać matki to zakończ
			}
			
			$wynik=$this->db->query("UPDATE  `wezly` SET  `rodzic` =  {$idOjciec} WHERE `id_wezla` ={$id}");
			if($wynik)
				return true;
			else
				return false;
		}
		else 
			return false;
	}
	
	public function usunWezel($id, $moderator, $usunUzytkownika=false)
	{
		if($this->db!==null && $id!==null)
		{
			$we=$this->zwrocWezel($id);
			if($we==null)	return false;
			$user=new Uzytkownik_class();
			if($we->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
			if($we->getUzytkownik()!==null && !$usunUzytkownika)	return false;				//jeśli węzeł jest użytkownikiem to nie można usunąć
			
			$this->oderwij($moderator, $id);

			$wynik=$this->db->query("DELETE FROM `wezly` WHERE `id_wezla` ={$id}");
			if(!$wynik) return false;					//sprawdzenie czy węzeł usunięty jeśli nie to zwróć błąd

			$wynik=$this->db->query("DELETE FROM `osoba` WHERE `id_osoba` ={$id}");
			if($wynik)		//sprawdzenie czy osoba usunięta jeśli nie to zwróć błąd
				return true;
			else 
				return false;
		}
		else 
			return false;
	}
	
	//usuwa powiązania między danym węzłem, a połączonymi z nim węzłąmi, lub opcjonalnie tylko między węzłem id1, a id2
	public function oderwij($moderator, $id1, $id2=null)
	{
		if($this->db!==null && $id1!==null)
		{
			$we1=$this->zwrocWezel($id1);
			if($we1==null)	return false;
			$user=new Uzytkownik_class();
			
			if($id2!==null)																					//usuwanie powiązań między id1, a id2
			{
				$we2=$this->zwrocWezel($id2);
				if($we2==null)	return false;
				
				if($we1->getModerator()!=$moderator && $we2->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
				
				$tid1=$id1;	$tid2=$id2;			//przypisanie danych dla pierwszego wykonania pętli
				for($i=0; $i<2; $i++)
				{
					$wezelBD=$this->db->query("SELECT * FROM wezly WHERE id_wezla = ".$tid1);
					if(($w=$wezelBD->fetch_assoc())!==null)
					{
						$twez2=$this->zwrocWezel($tid2);
						if($w['rodzic']==$twez2->getId() || ($twez2->getPartner()!==null && $w['rodzic']==$twez2->getPartner()->getId()))	//usuwanie powiązania (ojciec || matka) - dziecko
						{
							$wynik=$this->db->query("UPDATE `wezly` SET  `rodzic` = NULL WHERE `id_wezla` ={$tid1}");
							if(!$wynik)	return false;
							$i++;
						}
						else if($w['partner']==$tid2)		//usuwanie powiązań z partnerem i ewentualnie dziećmi
						{
							$wynik=$this->usunPowiazanieZPartneremIDziecmi($we1);
							if(!$wynik)	return false;
							$i++;
						}
					}
					$tid1=$id2;	$tid2=$id1;		//przypisanie danych dla drugiego wykonania pętli
				}
			}
			else																							//oderwanie węzła od drzewa do którego należy
			{
				
				if($we1->getModerator()!=$moderator && !$user->CzyAdmin($moderator))	return false;	//sprawdzenie dostępu
				
				$wynik=$this->db->query("UPDATE `wezly` SET  `rodzic` = NULL WHERE `id_wezla` ={$we1->getId()}");
				if(!$wynik)	return false;
				
				$wynik=$this->usunPowiazanieZPartneremIDziecmi($we1);
				if(!$wynik)	return false;
			}
			
			return true;
		}
		else
			return false;
	}
	
	private function usunPowiazanieZPartneremIDziecmi(Wezel $we1)
	{
		if($we1->getOsoba()->getPlec())						//jeśli kobieta to przypisz dzieci ze struktury męża
			$dzieci=$this->zwrocDzieci($we1->getId());
		else
		{
			if($we1->getPartner()!==null)
				$dzieci=$this->zwrocDzieci($we1->getPartner()->getId());
			else
				$dzieci=array();
		}
			
		foreach($dzieci as $dz)			//wpisywanie dzieciom null jako rodzic
		{
			$wynik=$this->db->query("UPDATE `wezly` SET  `rodzic` = NULL WHERE `id_wezla` ={$dz->getId()}");
			if(!$wynik)	return false;
		}
		
		if($we1->getPartner()!==null)
		{
			if(!$we1->getOsoba()->getPlec())		//usuwanie powiązań z partnerem
				$idPartnera=$we1->getPartner()->getId();
			else 
				$idPartnera=$we1->getId();
			$wynik=$this->db->query("UPDATE `wezly` SET  `partner` = NULL WHERE `id_wezla` ={$idPartnera}");
			if(!$wynik) return false;
		}
		
		
		return true;
	}
	
	//kryteria: -1 bez kryteriów, 0 - mogące być rodzicem, 1 - mogące być partnerem, 2 - mogące być dzieckiem węzła $we
	public function zwrocWezlyUzytkownika($uzytkownik, $kryteria=-1, $wezkryt=null)
	{
		if($this->db!==null)
		{
			$wezelBD=$this->db->query("SELECT * FROM wezly WHERE wlasciciel = '".$uzytkownik."'");
			$wezly=array();
			//pobranie w pętli kolejnych rekordów zapytania zwracającego węzły danego użytkownika
			while(($we=$wezelBD->fetch_assoc())!==null)
			{
				$wezel=$this->zwrocWezel($we['id_wezla']);
				$czyDodac=true;
				if($wezkryt!==null)
				{
					switch ($kryteria)
					{
						case 0:
							$czyDodac=$wezel->mozeBycRodzicem($wezkryt);
							break;
							
						case 1:
							$czyDodac=$wezel->mozeBycPartnerem($wezkryt);
							break;
							
						case 2:
							$czyDodac=$wezel->mozeBycDzieckiem($wezkryt);
							break;
								
						default:
							$czyDodac=true;
							break;
					}
				}
				if($czyDodac)
					$wezly[]=$wezel;
			}
				
			return $wezly;
		}
		else
			return false;
	}
	
	//zwraca false jeśli węzeł nie jest użytkownikiem lub wystąpił błąd
	private function zwrocUzytkownikaWgIdWezla($id)
	{
		if($this->db!==null && $id!==null)
		{
			$uzytkownikBD=$this->db->query("SELECT * FROM `uzytkownik` WHERE `id_osoba` =".$id);
			$uz=$uzytkownikBD->fetch_assoc();
			
			if($uz!==null)								//jeśli istnieje uzytkownik będący węzłem
			{
				return $uz['login'];
			}
			else
				return false;
		}
		else
			return false;
	}
	
	//akcja: 0-rodzice, 1-partner, 2-dziecko
	public function wyslijDoAkceptacji($idNowy, $akcja, $idWezla)
	{
		$wezNowy=$this->zwrocWezel($idNowy);
		$wez=$this->zwrocWezel($idWezla);
		if($wezNowy===null || $wez===null)	return false;		//sprawdzenie czy węzły istnieją
		
	//generowanie id wiadomości
		$maxBD=$this->db->query("SELECT MAX( id_wiadomosc ) max FROM  wiadomosci");
		$maxID=$maxBD->fetch_assoc();
		if($maxID['max']!==null)
			$idw = $maxID['max']+1;
		else
			$idw = 1;
		
		$temat='';
		$w='Użytkownik <a href="?o=wiadomosci&a=n_wiadomosc&do='.$wezNowy->getModerator().'"><i>'.$wezNowy->getModerator().'</i>';
		$w.='<i class="icon-envelope"></i></a>';
		$w.=' proponuje ';
		if($akcja==0)
		{
			$temat='Dodanie rodziców';
			$w.='dodanie rodziców (';
			$w.='<a href="?node='.$wezNowy->getId().'">'.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko().'</a>';
			if($wezNowy->getPartner()===null)	return false;
			$w.=' i ';
			$w.='<a href="?node='.$wezNowy->getPartner()->getId().'">'.$wezNowy->getPartner()->getOsoba()->getImie().' '.$wezNowy->getPartner()->getOsoba()->getNazwisko().'</a>';
			$w.=') ';
		}
		else if($akcja==1)
		{
			if($wezNowy->getOsoba()->getPlec())
			{
				$temat='Dodanie męża';
				$w.='dodanie męża (';
			}
			else
			{
				$temat='Dodanie żony';
				$w.='dodanie żony (';
			}
				
			$w.='<a href="?node='.$wezNowy->getId().'">'.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko().'</a>';
			$w.=') ';
		}
		else if($akcja==2)
		{
			$temat='Dodanie dziecka';
			$w.='dodanie dziecka (';
			$w.='<a href="?node='.$wezNowy->getId().'">'.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko().'</a>';
			$w.=') ';
		}
		
		$w.=' do osoby (';
		$w.='<a href="?node='.$wez->getId().'">'.$wez->getOsoba()->getImie().' '.$wez->getOsoba()->getNazwisko().'</a>';
		$w.=')';
		$w.='</p>';
		$w.='<p>Czy chcesz zaakceptować propozycję?</p>';
		$w.='<form action="?o=potwierdz" method="post">';
		$w.='<input type="hidden" name="akcja" value="'.$akcja.'">';
		$w.='<input type="hidden" name="idnowy" value="'.$idNowy.'">';
		$w.='<input type="hidden" name="idwezla" value="'.$idWezla.'">';
		$w.='<input type="hidden" name="idw" value="'.$idw.'">';
		$w.='<input type="submit" name="akceptuj" value="Akceptuj">';
		$w.='<input type="submit" name="odrzuc" value="Odrzuć">';
		$w.='</form>';
		
		$czas = time();
		$odbiorca=$wez->getModerator();
		$zapytanie="INSERT INTO `wiadomosci` VALUES (".$idw.", (select `id_osoba` from `uzytkownik` where `login`='".$odbiorca."'), -1, '".$temat."','".$w."',".$czas.",0);";
		$wynik = $this->db->query($zapytanie);
		if($wynik)
			return true;
		else
			return false;
	}
	
	public function akceptujDodanie($idNowy, $akcja, $idWezla, $idWiadomosci, $moderator)
	{
		$stan=true;
		$wezNowy=$this->zwrocWezel($idNowy);
		$wez=$this->zwrocWezel($idWezla);
		if($wezNowy===null || $wez===null)	$stan=false;
		
		if($stan)
		{
			if($akcja==0)	//dodanie rodziców
			{
				if($wezNowy->getPartner()!==null)
				{
					if($wezNowy->getOsoba()->getPlec())			//przypisanie istniejących węzłów jako ojciec i matka
					{
						$we1=$wezNowy;
						$we2=$wezNowy->getPartner();
					}
					else
					{
						$we1=$wezNowy->getPartner();
						$we2=$wezNowy;
					}
					if(!$this->dodajRodzicow($we1, $we2, $idWezla, $moderator))
						$stan=false;
				}
				else $stan=false;							//brak partnera
				
			}
			else if($akcja==1)	//dodanie partnera
			{
				if(!$this->dodajPartnera($wezNowy, $idWezla, $moderator))
					$stan=false;
			}
			else if($akcja==2)	//dodanie dziecka
			{
				if(!$this->dodajDziecko($wezNowy, $idWezla, $moderator))
					$stan=false;
			}
		}
		
		if($wezNowy!==null)
		{
			if($stan)		//udało się dodać
			{
				$temat='Zaakceptowano';
				$w='Propozycja dodania osoby: '.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko();
				$w.=' została zaakceptowana i osoba została poprawnie dodana.';
			}
			else			//nie udało się dodać 
			{
				$temat='Nie dodano';
				$w='Propozycja dodania osoby: '.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko();
				$w.=' została zaakceptowana ale nastąpił błąd i dodanie nie powiodło się.';
			}
			
			$czas = time();
			$odbiorca=$wezNowy->getModerator();
			$zapytanie="INSERT INTO `wiadomosci` VALUES (null, (select `id_osoba` from `uzytkownik` where `login`='".$odbiorca."'), -1, '".$temat."','".$w."',".$czas.",0);";
			$wynik = $this->db->query($zapytanie);
		}
		$this->usunWiadomosc($idWiadomosci);
		
		return $stan;
	}
	
	public function odrzucDodanie($idNowy, $akcja, $idWezla, $idWiadomosci)
	{
		$wezNowy=$this->zwrocWezel($idNowy);
		if($wezNowy!==null)
		{
			$temat='Odrzucono element';
			$w='Propozycja dodania osoby: '.$wezNowy->getOsoba()->getImie().' '.$wezNowy->getOsoba()->getNazwisko();
			$w.=' została odrzucona.';
			$czas = time();
			$odbiorca=$wezNowy->getModerator();
			$zapytanie="INSERT INTO `wiadomosci` VALUES (null, (select `id_osoba` from `uzytkownik` where `login`='".$odbiorca."'), -1, '".$temat."','".$w."',".$czas.",0);";
			$wynik = $this->db->query($zapytanie);
		}
		$this->usunWiadomosc($idWiadomosci);
	}
	
	private function usunWiadomosc($idWiadomosci)
	{
		if($this->db!==null && $idWiadomosci!==null)
		{
			$wynik=$this->db->query("DELETE FROM `wiadomosci` WHERE `id_wiadomosc` ={$idWiadomosci}");
			if($wynik)		//sprawdzenie czy wiadomość usunięta jeśli nie to zwróć błąd
				return true;
			else
				return false;
		}
		else
			return false;
	}
	
	public function usunUzytkownika($login, $administrator, $nowyLogin=null)
	{
		if($this->db!==null)
		{
			$user=new Uzytkownik_class();
			if(!$user->CzyAdmin($administrator))	return false;	//sprawdzenie dostępu
			if($nowyLogin!==null)								//przypisanie węzłom nowego moderatora
			{
				if($login==$nowyLogin)		return false;		//nowy moderator musi być inny niż stary
				$userBD=$this->db->query('SELECT * FROM uzytkownik WHERE login ="'.$nowyLogin.'"');
				$us=$userBD->fetch_assoc();

				if($us===null)	return false;		//jeśli nie istnieje użytkownik o loginie $nowyLogin to zakończ

				$wynik=$this->db->query('UPDATE `wezly` SET  `wlasciciel` = "'.$nowyLogin.'" WHERE `wlasciciel` ="'.$login.'"');
				if(!$wynik) return false;
			}
			else
			{
				$wezly=$this->zwrocWezlyUzytkownika($login);
				foreach ($wezly as $ww)			//usuwanie wszystkich węzłów użytkownika
				{
					$this->usunWezel($ww->getId(), $administrator, true);
				}
			}
			$wynik=$this->db->query('DELETE FROM `uzytkownik` WHERE login ="'.$login.'"');
			if(!$wynik) return false;
			else return true;
			
		}
		else 
			return false;
	}
}

?>